void azzera_guerra(war *guerra) {
	guerra->sinistra[0] = 0;
	guerra->sinistra[1] = 0;
	guerra->sinistra[2] = 0;
	guerra->destra[0] = 0;
	guerra->destra[1] = 0;
	guerra->destra[2] = 0;
	return;
}

void inizializza_giocatori(partita* game){
	int i, meraviglia[7];
	for(i = 0; i < 7; i++) meraviglia[i] = i; // int e enum equivalgono, ma bisogna fare attenzione agli estremi
	randomizza_array(meraviglia, 7);
	
	for(i = 0; i < 7; i++) {
		game->giocatori[i].soldi = 3;
		game->giocatori[i].mano = NULL;
		game->giocatori[i].risorse_campo = NULL;
		game->giocatori[i].strutture_campo = NULL;
		game->giocatori[i].scarti_meraviglia = NULL;
		game->giocatori[i].scudi = 0;
		game->giocatori[i].strutture_scientifiche.tavole = 0;
		game->giocatori[i].strutture_scientifiche.ruote = 0;
		game->giocatori[i].strutture_scientifiche.compassi = 0;
		game->giocatori[i].punti_giallo = 0;
		game->giocatori[i].punti_viola = 0;
		game->giocatori[i].punti_meraviglia = 0;
		azzera_guerra(&game->giocatori[i].guerra);
		game->giocatori[i].costo_acquisto_risorse.normali_destra = 2;
		game->giocatori[i].costo_acquisto_risorse.normali_sinistra = 2;
		game->giocatori[i].costo_acquisto_risorse.speciali_destra = 2;
		game->giocatori[i].costo_acquisto_risorse.speciali_sinistra = 2;
		game->giocatori[i].destra = &game->giocatori[mod(i+1, 7)];
		game->giocatori[i].sinistra = &game->giocatori[mod(i-1, 7)];
		game->giocatori[i].meraviglia = crea_meraviglia(meraviglia[i]);
	}
	
	modi modo_gioca_meraviglia = {.azione = MERAVIGLIA, .paga.destra = 0, .paga.sinistra = 0, .paga.banco = 0};	
	for(i = 0; i < 7; i++) {
		gioca_carta(game, &game->giocatori[i], NULL, &modo_gioca_meraviglia);
	}
	return;
}

int la_carta_si_trova_nel_campo(carta* da_cercare, giocatore* player){
	if(lista_carte_cerca_per_nome(da_cercare, player->risorse_campo)) return 1;
	if(lista_carte_cerca_per_nome(da_cercare, player->strutture_campo)) return 1;
	return 0;
}


void attiva_azioni_finali(giocatore *player){
	carta* puntatore = player->strutture_campo;
	while(puntatore != NULL){
		puntatore->azione_finale(player); 		//si fa così??????  <----
		puntatore = puntatore->succ;
	}
	return;
}

int calcola_punti_rosso(giocatore player){
	int i;
	int punti_ottenuti = 0;
	for(i = 0; i < 3; i++){
	punti_ottenuti += player.guerra.destra[i];
	}
	for(i = 0; i < 3; i++){
	punti_ottenuti += player.guerra.sinistra[i];
	}
	return punti_ottenuti;
}

int calcola_punti_soldi(giocatore player){
	return (player.soldi / 3);
}

int calcola_punti_meraviglia(giocatore player){
	return player.punti_meraviglia;
}

int calcola_punti_blu(giocatore player){
	return player.punti_strutture_civili;
}

int calcola_punti_giallo(giocatore player){
	return player.punti_giallo;
}

int calcola_punti_viola(giocatore player){
	return player.punti_viola;
}

int calcola_punti_verde(giocatore player){
	int punti_ottenuti = 0;
	punti_ottenuti += (player.strutture_scientifiche.tavole * player.strutture_scientifiche.tavole); 
	punti_ottenuti += (player.strutture_scientifiche.ruote * player.strutture_scientifiche.ruote); 
	punti_ottenuti += (player.strutture_scientifiche.compassi * player.strutture_scientifiche.compassi); 
	punti_ottenuti += (minimo_di_tre(player.strutture_scientifiche.tavole, player.strutture_scientifiche.ruote, player.strutture_scientifiche.compassi) * 7);
	return punti_ottenuti;
}


void calcola_punti_finale(partita* game){
	int i, j;
	for(i = 0; i < 7; i++){
		game->tabella_punti[i][0] = calcola_punti_rosso(game->giocatori[i]);
		game->tabella_punti[i][1] = calcola_punti_soldi(game->giocatori[i]);
		game->tabella_punti[i][2] = calcola_punti_meraviglia(game->giocatori[i]);
		game->tabella_punti[i][3] = calcola_punti_blu(game->giocatori[i]);
		game->tabella_punti[i][4] = calcola_punti_giallo(game->giocatori[i]);
		game->tabella_punti[i][5] = calcola_punti_viola(game->giocatori[i]);
		game->tabella_punti[i][6] = calcola_punti_verde(game->giocatori[i]);
		for(j = 0; j < 7; j++){
			game->tabella_punti[i][7] += game->tabella_punti[i][j];
		}
	}
}
